/*
 *  Лицензия MIT
 * 
 *  Copyright 2011 Salnikov Aleksey.
 * 
 *  Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного обеспечения
 *  и сопутствующей документации (в дальнейшем именуемыми "Программное Обеспечение"),
 *  использовать Программное Обеспечение без ограничений, включая неограниченное право
 *  на использование, копирование, изменение, объединение, публикацию, распространение,
 *  сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам,
 *  которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
 * 
 *  Вышеупомянутый копирайт и данные условия должны быть включены во все копии или значимые
 *  части данного Программного Обеспечения.
 * 
 *  ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ЛЮБОГО ВИДА ГАРАНТИЙ,
 *  ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,
 *  СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ
 *  НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ
 *  ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ
 *  С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
 *  ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
 */

package CommonTools;

import java.awt.AWTException;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * Класс окна настройки сервера
 *
 * @author Salnikov Aleksey
 */
public class SettingsWindow extends JFrame
{
    private SystemTray systemTray = SystemTray.getSystemTray();
    private TrayIcon trayIcon;
    protected JTextField portF;
    protected JLabel portL;
    protected JButton saveB;

    public SettingsWindow() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, AWTException
    {
        super("Настройка сервера");

        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

        ImageIcon icon = new ImageIcon("images/icon.png");
        this.setIconImage(icon.getImage());
        trayIcon = new TrayIcon(icon.getImage(), "Server Ordo");

        Container c = this.getContentPane();

        c.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 0.5;
        gbc.weighty = 0.5;
        gbc.anchor = GridBagConstraints.NORTHWEST;

        portF = new JTextField();
        portL = new JLabel("Порт сервера:");
        saveB = new JButton("Сохранить");

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(3,3,0,3);

        c.add(portL, gbc);
        gbc.insets = new Insets(0,0,0,0);
        gbc.gridx = 1;
        gbc.ipadx = 50;
        gbc.fill = gbc.HORIZONTAL;
        c.add(portF, gbc);

        gbc.gridy = 1;
        c.add(saveB, gbc);

        saveB.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    Settings.changeParametr("port", portF.getText());
                    Settings.saveConfiguration();
                }
            }
        );

        this.refreshFields();

        PopupMenu menu = new PopupMenu();
        MenuItem exit = new MenuItem("Выход");
        MenuItem open = new MenuItem("Настройка");
        menu.add(open);
        menu.add(exit);
        
        exit.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    System.exit(0);
                }
            }
        );

        open.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    showMe();
                }
            });

        trayIcon.addActionListener(new ActionListener()
        {
           public void actionPerformed(ActionEvent e)
            {
               showMe();
            }
        }
        );

        trayIcon.setPopupMenu(menu);
        systemTray.add(trayIcon);

        
        this.setLocationRelativeTo(null);
        this.setSize(150, 80);
        this.setResizable(false);
        this.pack();
        this.validate();
        //this.setVisible(true);
        this.setState(JFrame.ICONIFIED);
    }

    protected void showMe()
    {
        this.setVisible(!this.isVisible());
        if (this.isVisible())
        {
            refreshFields();
            this.setState(JFrame.NORMAL);
        }
        else
            this.setState(JFrame.ICONIFIED);
    }

    protected void refreshFields()
    {
        portF.setText(Settings.getParametrValue("port"));
    }
}
